module.exports = function(app) {	
	return {
		"get":function(p_fnsuccess,p_fnerror){
			app.models.usuario.find().exec().then(p_fnsuccess,p_fnerror);
		}
		,"insert":function(p_usuario,p_fnsuccess,p_fnerror) {		
			app.models.usuario.create(p_usuario).then(
				function(dta){				
					p_fnsuccess(dta._id);
				}
				,p_fnerror
			);
		}
		,"update":function(p_usuario,p_fnsuccess,p_fnerror){
			app.models.usuario.findByIdAndUpdate(p_usuario._id,p_usuario).exec().then(
				function(dta){
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
		,"delete":function(p_id,p_fnsuccess,p_fnerror) {
			app.models.usuario.remove({"_id":p_id}).exec().then(
				function(){
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
		,"logar":function(p_usuario,p_fnsuccess,p_fnerror){
			//console.log(p_usuario);
			app.models.usuario.findOne(p_usuario).exec().then(
				function(dta){
					p_fnsuccess((dta)?true:false);
					//console.log(dta);	
				}
				,p_fnerror
			);
		}
		,"getByLogin":function(p_login,p_fnsuccess,p_fnerror){
			//console.log(p_usuario);
			app.models.usuario.findOne({"login":p_login}).exec().then(				
				p_fnsuccess				
				,p_fnerror
			);
		}
		,"getBySnAtivo":function(p_snAtivo,p_fnsuccess,p_fnerror){
			//console.log(p_usuario);
			app.models.usuario.find(
				{"snAtivo":p_snAtivo}
				,{
					"login":1
					,"senha":0
				}
			).exec().then(				
					p_fnsuccess				
					,p_fnerror
				);
		}
		,"insertPerfil":function(p_idUsuario,p_usuarioPerfil,p_fnsuccess,p_fnerror) {				
			app.models.usuario.findById(p_idUsuario,function(erro,data){
				if(erro){
					p_fnerror(erro);
				}else{
					var newdoc = data.perfis.create(p_usuarioPerfil);
					console.log(newdoc);
					data.perfis.push(newdoc);				
					data.save(function (err) {
						if(err){
							return p_fnerror(err);
						};
						console.log('the sub-doc was saved2');
					});
					p_fnsuccess(newdoc._id);				
				};			
			});  
		}
		,"updatePerfil":function(p_idUsuario,p_usuarioPerfil,p_fnsuccess,p_fnerror) {	
			app.models.usuario.findOneAndUpdate(
				{ "_id": p_idUsuario , "perfis._id": p_usuarioPerfil._id }
				,{ "$set":{"perfis.$": p_usuarioPerfil}}
				,function(err,doc) {
					if(err){
						p_fnerror(err);
					}else{
						p_fnsuccess(true);						
					}
				}
			);
		}
		,"deletePerfil":function(p_idUsuario,p_idUsaurioPerfil,p_fnsuccess,p_fnerror) {						
			app.models.usuario.findByIdAndUpdate(p_idUsuario,{$pull:{"perfis":{_id:p_idUsaurioPerfil}}}).then(
				function(dta){		
					p_fnsuccess(true);
				}
				,p_fnerror
			);
		}
	};
};
